#ifndef _POOLQUEUE_H
#define _POOLQUEUE_H

#include <stdio.h>
#include <stdbool.h>
#include <pthread.h>
#include <stdlib.h>


// 任务结构体
typedef struct Task
{
    void (*function)(void* arg);
    void* arg;
}Task;

// 队列
typedef struct TaskQueue
{
    bool nobloking;             // 是否阻塞
    int queueCapacity;          // 容量
    int queueCurSize;           // 当前任务个数
    int queueFront;             // 队头 -> 取数据
    int queueRear;              // 队尾 -> 放数据
    pthread_mutex_t qmutex;     
    pthread_cond_t qcond;
    Task* taskQ;
}TaskQueue;

TaskQueue* QueueInit(int totalsize);
bool QueuePushTask(TaskQueue* queue,Task *task);
bool QueuePopTask(TaskQueue* queue,Task *task);
void QueueCancel(TaskQueue* queue);

#endif